import axios from "axios";
import NProgress from "nprogress";
import "nprogress/nprogress.css";

NProgress.configure({ showSpinner: false });

// 所有错误对象
const messages = {
  401: "未授权",
  403: "禁止访问",
  404: "资源找不到",
  500: "服务器内部错误",
};

// 创建一个axios的实例
// 这个request功能和axios基本一致
const requestMock = axios.create({
  baseURL: "/mock/755c085ac75aadfaa658426ecbe7c2cc/api", // 基础路径：公共请求地址前缀
  headers: {},
  // xhr.abort() 中断请求
  timeout: 10000, // 请求的超时时间，请求超过10000ms没有返回响应，就会自动中断请求
});
// 请求拦截器
requestMock.interceptors.request.use((config) => {
  NProgress.start();
  // config是请求的配置对象，将来发送请求的配置都是从config中读取的
  return config;
});
// 响应拦截器
requestMock.interceptors.response.use(
  (response) => {
    // 响应成功/请求成功
    NProgress.done();
    // 请求成功并不代表功能成功
    if (response.data.code === 200) {
      // 功能成功
      // 返回成功的状态，和数据
      return response.data.data;
    } else {
      // 功能失败
      // 返回失败的状态，和错误原因
      return Promise.reject(response.data.message || "未知错误，请联系管理员");
    }
  },
  (error) => {
    NProgress.done();
    // 响应失败/请求失败
    let message = "未知错误，请联系管理员";
    console.dir(error);

    if (error.response) {
      // 响应回来了
      message = messages[error.response.status];
    } else {
      // 响应没有回来
      if (error.message.indexOf("timeout") > -1) {
        message = "网络超时，请连接WIFI试试";
      } else if (error.message.indexOf("Network") > -1) {
        message = "断网了，请打开网络链接试试";
      }
    }
    return Promise.reject(message);
  }
);
export default requestMock;
